package com.lecyon.farm.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author Yao Zheng
 * @Date 2020/4/18 14:46
 */
@Slf4j
@Service
public class BaseElasticService {

//    @Autowired
//    private RestHighLevelClient restHighLevelClient;
//
//    /**
//     * @param indexName 索引名称
//     * @param indexSql  索引描述
//     * @return void
//     * @throws
//     * @author WCNGS@QQ.COM
//     * @See
//     * @date 2019/10/17 17:30
//     * @since
//     */
//    public void createIndex(String indexName, String indexSql) {
//        try {
//            if (!this.indexExist(indexName)) {
//                log.error(" idxName={} 已经存在,idxSql={}", indexName, indexSql);
//                return;
//            }
//            CreateIndexRequest request = new CreateIndexRequest(indexName);
//            buildSetting(request);
//            request.mapping(indexSql, XContentType.JSON);
////            request.settings() 手工指定Setting
//            CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
//            if (!res.isAcknowledged()) {
//                throw new RuntimeException("初始化失败");
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            System.exit(0);
//        }
//    }
//
//    /**
//     * 判断某个index是否存在
//     *
//     * @param indexName index名
//     * @return boolean
//     * @throws
//     * @See
//     * @date 2019/10/17 17:27
//     * @since
//     */
//    public boolean indexExist(String indexName) throws Exception {
//        GetIndexRequest request = new GetIndexRequest(indexName);
//        request.local(false);
//        request.humanReadable(true);
//        request.includeDefaults(false);
//        request.indicesOptions(IndicesOptions.lenientExpandOpen());
//        return restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
//    }
//
//    /**
//     * 判断某个index是否存在
//     *
//     * @param indexName index名
//     * @return boolean
//     * @throws
//     * @author WCNGS@QQ.COM
//     * @See
//     * @date 2019/10/17 17:27
//     * @since
//     */
//    public boolean isExistsIndex(String indexName) throws Exception {
//        return restHighLevelClient.indices().exists(new GetIndexRequest(indexName), RequestOptions.DEFAULT);
//    }
//
//    /**
//     * 设置分片
//     *
//     * @param request
//     * @return void
//     * @throws
//     * @author WCNGS@QQ.COM
//     * @See
//     * @date 2019/10/17 19:27
//     * @since
//     */
//    public void buildSetting(CreateIndexRequest request) {
//        request.settings(Settings.builder().put("index.number_of_shards", 3)
//                .put("index.number_of_replicas", 2));
//    }
//
//    /**
//     * @param idxName index
//     * @param entity  对象
//     * @return void
//     * @throws
//     * @See
//     * @date 2019/10/17 17:27
//     * @since
//     */
////    public void insertOrUpdateOne(String idxName, ElasticEntity entity) {
////        IndexRequest request = new IndexRequest(idxName);
////        log.error("Data : id={},entity={}", entity.getId(), JSON.toJSONString(entity.getData()));
////        request.id(entity.getId());
////        request.source(entity.getData(), XContentType.JSON);
//////        request.source(JSON.toJSONString(entity.getData()), XContentType.JSON);
////        try {
////            restHighLevelClient.index(request, RequestOptions.DEFAULT);
////        } catch (Exception e) {
////            throw new RuntimeException(e);
////        }
////    }
//
//
//    /**
//     * 批量插入数据
//     *
//     * @param idxName index
//     * @param list    带插入列表
//     * @return void
//     * @throws
//     * @See
//     * @date 2019/10/17 17:26
//     * @since
//     */
////    public void insertBatch(String idxName, List<ElasticEntity> list) {
////        BulkRequest request = new BulkRequest();
////        list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getId())
////                .source(item.getData(), XContentType.JSON)));
////        try {
////            restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
////        } catch (Exception e) {
////            throw new RuntimeException(e);
////        }
////    }
//
//    /**
//     * 批量删除
//     *
//     * @param indexName index
//     * @param idList    待删除列表
//     * @return void
//     * @throws
//     * @author WCNGS@QQ.COM
//     * @See
//     * @date 2019/10/17 17:14
//     * @since
//     */
//    public <T> void deleteBatch(String indexName, Collection<T> idList) {
//        BulkRequest request = new BulkRequest();
//        idList.forEach(item -> request.add(new DeleteRequest(indexName, item.toString())));
//        try {
//            restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @param indexName index
//     * @param builder   查询参数
//     * @param clazz     结果类对象
//     * @return java.util.List<T>
//     * @throws
//     * @See
//     * @date 2019/10/17 17:14
//     * @since
//     */
//    public <T> List<T> search(String indexName, SearchSourceBuilder builder, Class<T> clazz) {
//        SearchRequest request = new SearchRequest(indexName);
//        request.source(builder);
//        try {
//            SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//            SearchHit[] hits = response.getHits().getHits();
//            List<T> result = Lists.newArrayList();
//            for (SearchHit hit : hits) {
//                T t = JSON.toJavaObject(JSON.parseObject(hit.getSourceAsString()), clazz);
//                result.add(t);
//            }
//            return result;
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @param indexName index
//     * @param builder   查询参数
//     * @param clazz     结果类对象
//     * @return java.util.List<T>
//     * @throws
//     * @See
//     * @date 2019/10/17 17:14
//     * @since
//     */
//    public <T> Map<String, T> searchMap(String indexName, SearchSourceBuilder builder, Class<T> clazz) {
//        SearchRequest request = new SearchRequest(indexName);
//        request.source(builder);
//        try {
//            SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//            SearchHit[] hits = response.getHits().getHits();
//            Map<String, T> resultMap = Maps.newHashMap();
//            String key;
//            for (SearchHit hit : hits) {
//                T t = JSON.toJavaObject(JSON.parseObject(hit.getSourceAsString()), clazz);
//                key = hit.getId();
//                resultMap.put(key, t);
//            }
//            return resultMap;
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * 删除index
//     *
//     * @param indexName
//     * @return void
//     * @throws
//     * @See
//     * @date 2019/10/17 17:13
//     * @since
//     */
//    public void deleteIndex(String indexName) {
//        try {
//            if (!this.indexExist(indexName)) {
//                log.error(" indexName={} 已经存在", indexName);
//                return;
//            }
//            restHighLevelClient.indices().delete(new DeleteIndexRequest(indexName), RequestOptions.DEFAULT);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @param indexName
//     * @param builder
//     * @return void
//     * @throws
//     * @See
//     * @date 2019/10/17 17:13
//     * @since
//     */
//    public void deleteByQuery(String indexName, QueryBuilder builder) {
//        DeleteByQueryRequest request = new DeleteByQueryRequest(indexName);
//        request.setQuery(builder);
//        //设置批量操作数量,最大为10000
//        request.setBatchSize(10000);
//        request.setConflicts("proceed");
//        try {
//            restHighLevelClient.deleteByQuery(request, RequestOptions.DEFAULT);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }

}
